package 多态;

/**
 * @author Fang Ruichuan
 * @date 2022-12-07 20:56
 */

public class Animal {
    public void eat() {
        System.out.println("动物吃东西");
    }

    public void 摸鱼() {
        System.out.println("动物在摸鱼");
    }
}

// 新建一个子类继承父类并覆盖重写父类的eat方法，然后写一个特定的方法run
class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫在吃鱼");
    }

    public void run() {
        System.out.println("猫在跑");
    }
}


class AnimalMain {
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.eat();
        animal.摸鱼();
//        animal.run();   // 编译错误
    }
}


class InstanceMain {
    public static void main(String[] args) {
        Animal animal = new Cat(); // 本来是猫
        animal.eat();               // 猫吃鱼

        // 如果希望使用子类特有的方法，需要向下转型
        if (animal instanceof Cat) {    // true
            Cat cat = (Cat) animal;
            cat.run();          // 猫在跑
        }
    }
}